package com.springboot.jdk.nio;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * FileChannel Demo 案例
 * 文件添加了一把共享锁
 * 再往文件里面写数据，此时是会写失败的
 *
 * @author: zr
 * @date: 2021-10-19
 */
public class FileChannelShareLockWriteDemo {

    public static void main(String[] args) throws IOException {
        String path = "F:\\develop\\channel\\hello.txt";

        File file = new File(path);
        File fileParent = file.getParentFile();
        if (!fileParent.exists()) {
            fileParent.mkdirs();
        }
        file.createNewFile();

        // 构造一个传统的文件输出流
        FileOutputStream fileOutputStream = new FileOutputStream(path);

        // 通过文件输出流获取到对应的FileChannel, 已NIO的方式来写文件
        FileChannel channel = fileOutputStream.getChannel();

        // 构建一个 ByteBuffer 缓冲区
        ByteBuffer wrap = ByteBuffer.wrap("hello world".getBytes());

        // 通过channel将 Buffer 里面的数据写入到磁盘文件里面
        channel.write(wrap);

        channel.close();
        fileOutputStream.close();
    }
}
